#/*************************************************************************
#    > File Name: Lib/Plot_Data_Operation.py
#    > Author: Yan Wang
#    > Mail: wangyan@imnu.edu.cn
#    > Created Time: 2022年06月17日 星期五 17时52分08秒
# ************************************************************************/
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from List_Operation import *
from File_Operation import *
from String_Operation import *


# 生成两参数的 heatmap 数据
# 输入参数 第一个DF  第二个为 df 中需要的横纵轴名称， 第三个为value值
# 需要df和value_list的长度相同
def Generate_Hotmap_Data_from_Para_and_Value(para_file_name,used_map, value_list,hotmap_out_file,hotmap_variable_name):
	para_df=Load_THDM_Param(para_file_name,used_map)    #加载para_file_name参数，返回used_map列表  
	if(len(para_df) != len(value_list)):
		print("Error: value_list length does not equal para length!")
		return({})
	para_df["sig"]=value_list
	f=open(hotmap_out_file,'w')
	str_title="Double_t {}".format(hotmap_variable_name)+"[{}][3]=".format(len(para_df))+"\n{"
	f.write(str_title)
	for i in range(len(para_df)):
		content=str(para_df[used_map[0]][i])+","+str(para_df[used_map[1]][i])+","+str(para_df["sig"][i])
		f.write("{"+content+"}")
		if i != len(para_df)-1:
			f.write(",\n")
	f.write("};")
	f.close()
	print("The heatmap data is in : ",hotmap_out_file)
	return(para_df)


# 生成两参数的 heatmap 数据
# 输入参数 第一个三列list, 第一个为x轴，第二个为y轴，第三个为value 
def Generate_Hotmap_Data_from_List(para,hotmap_out_file,hotmap_variable_name):
	Create_Folder_from_FileDir(hotmap_out_file,"/")
	f=open(hotmap_out_file,'w')   #只写模式打开文件
	length=len(para[0])
	str_title="Double_t {}".format(hotmap_variable_name)+"[{}][3]=".format(length)+"\n{"
	f.write(str_title)
	for i in range(length):
		content=str(para[0][i])+","+str(para[1][i])+","+str(para[2][i])
		f.write("{"+content+"}")
		if i != length-1:
			f.write(",\n")
	f.write("};")
	f.close()
	print("The heatmap data is in : ",hotmap_out_file)
	return(para)


def Generate_Hotmap_Code(para,template_code="/home/yancy/Software/ARCH_test/Auto_Running/code/Examples/test_input/hotmap.C"):
	out_file=para["C_file"]
	print(template_code)
	Copy_File(template_code,out_file)   #将template_code复制生成多个out_file_1(2...)子文件
	file_basename=Path(para["dat_file"]).stem   #获取file_name不带扩展名的基文件
	linenos=[39,44,45,47,48,59,60,77]
	line39 = "void {}()".format(file_basename)   #{}内传参上述基文件到file_name第39行
	bins = List_to_String(para["bins"])   #在给出bins列表每个元素后面添加','
	line44 = "TH2F *hcol1 = new TH2F(\"hcol1\",\"\",{});".format(bins)
	fo = open(para["dat_file"],"r")   #只读模式打开文件
	line45 = fo.read() 
	fo.close()

	line47 = "for (Int_t i = 0; i < {}; i++) {{".format(para["data_length"])
	line48 = "hcol1->Fill({}[i][0],{}[i][1],{}[i][2]);".format(para["var_name"],para["var_name"],para["var_name"])    #同上传参，但是要注意这里是逐个传参
	line59 = "hcol1->GetXaxis()->SetTitle(\"{}\");".format(para["X_name"])
	line60 = "hcol1->GetYaxis()->SetTitle(\"{}\");".format(para["Y_name"])
	output_file_varname="hotmap_{}.pdf".format(para["var_name"])
	line77="TString outfilename = TString(\"{}\");".format(output_file_varname)
	strings=[line39,line44,line45,line47,line48,line59,line60,line77]
	File_Replace(out_file,linenos,strings)    #文件替换，out_file中逐个替换linenos行到strings   eg：39替换到line39
	print("The output hotmap code is in :", out_file)
	return(out_file)


